home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 09 - 1993 / 09.07 Jul 93 / Bedrock Header Files / Strings Includes / BRStrToo.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-19  |  11.5 KB  |  302 lines  |  [TEXT/MPS ]

  1. #ifndef BRSTRTOO_H
  2. #define BRSTRTOO_H
  3. //========================================================================================
  4. //
  5. //     File:        BRStrToo.h
  6. //     Release Version:    $ 1.0d1 $
  7. //
  8. //     Creation Date:    4/15/93
  9. //
  10. //     COPYRIGHT 1993 SYMANTEC CORPORATION. ALL RIGHTS RESERVED. UNPUBLISHED -- RIGHTS
  11. //     RESERVED UNDER THE COPYRIGHT LAWS OF THE UNITED STATES. USE OF COPYRIGHT NOTICE IS
  12. //     PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION OR DISCLOSURE.
  13. //
  14. //     THIS SOFTWARE CONTAINS PROPRIETARY AND CONFIDENTIAL INFORMATION OF SYMANTEC
  15. //     CORPORATION. USE, DISCLOSURE, OR REPRODUCTION IS PROHIBITED WITHOUT THE PRIOR
  16. //     EXPRESS WRITTEN PERMISSION OF SYMANTEC CORPORATION.
  17. //
  18. //     RESTRICTED RIGHTS LEGEND
  19. //     Use, duplication, or disclosure by the Government is subject to restrictions as set
  20. //     forth in subparagraph (c)(l)(ii) of the Rights in Technical Data and Computer
  21. //     Software clause at DFARS 252.227-7013. Symantec Corporation, 10201 Torre Avenue,
  22. //     Cupertino, CA 95014.
  23. //
  24. //========================================================================================
  25.  
  26. #ifndef   BRAUTODE_H
  27. #include "BRAutoDe.h"
  28. #endif
  29.  
  30. #ifndef BRTSTRS_H
  31. #include "BRTStrs.h"
  32. #endif
  33.  
  34. enum BR_StringCompareResult
  35. {
  36.     kStringOneLess = -1, kStringsEqual = 0, kStringOneGreater = 1
  37. } ;
  38.  
  39. //========================================================================================
  40. //    CLASS BR_TStringTool
  41. //
  42. //        A tool for string operations.  StringTools are used for operations that don't fit
  43. //        well as methods of strings.  The principle reason for placing an operation in a 
  44. //        tool instead of a string is when the operation may have multiple algorithm 
  45. //        implementations.  We make this distinction because it is undesirable to force
  46. //        a user to subclass one or more string classes just to use a different set of
  47. //        tool algorithms.
  48. //
  49. //        The BR_TStringTool class is an abstract base class.
  50. //========================================================================================
  51.  
  52. template <class tCharacter>
  53. class BR_TStringTool : public _BR_CAutoDestructObject
  54. {
  55. public:
  56.  
  57.     virtual ~BR_TStringTool();
  58.     BR_TStringTool();
  59.     
  60.     virtual BR_StringCompareResult CompareStrings(BR_TTextReader<tCharacter> &reader1,
  61.                                           BR_TTextReader<tCharacter> &reader2) = 0;
  62.                                          
  63.     virtual BR_Boolean FindSubString(const BR_TTextReader<tCharacter> &reader,
  64.                                      const BR_TString<tCharacter> &subString,
  65.                                      BR_CharacterPosition &foundPosition) = 0;
  66.                                      
  67.     virtual BR_Boolean FindCharacter(BR_TTextReader<tCharacter> &reader,
  68.                                     tCharacter character,
  69.                                     BR_CharacterPosition &foundPosition) = 0;
  70.                                  
  71.     virtual BR_Boolean FindWhiteSpace(BR_TTextReader<tCharacter> &reader,
  72.                                         BR_CharacterPosition &foundPosition) = 0;
  73.                                  
  74.     virtual BR_Boolean FindNonWhiteSpace(BR_TTextReader<tCharacter> &reader,
  75.                                         BR_CharacterPosition &foundPosition) = 0;
  76.  
  77.     virtual void Substitute(const BR_TTextReader<tCharacter> &reader,
  78.                             const BR_TString<tCharacter> &searchString,
  79.                             const BR_TString<tCharacter> &substitutionString) = 0;
  80.     
  81.     virtual BR_Boolean IsWhiteSpace(tCharacter character) = 0;
  82.                                  
  83.     virtual void ToUpper(BR_TTextFilter<tCharacter> &string) = 0;
  84.     
  85.     virtual void ToLower(BR_TTextFilter<tCharacter> &string) = 0;
  86.  
  87.     virtual void ConvertToChar(const tCharacter* source, BR_Char* destination, BR_CharacterCount items) = 0;
  88.     
  89.     virtual void ConvertToWideChar(const tCharacter* source, BR_WideChar* destination, BR_CharacterCount items) = 0;
  90.  
  91.     // Non-virtual functions implemented using above virtual functions.
  92.  
  93.     BR_StringCompareResult CompareStrings(const BR_TString<tCharacter> &string1,
  94.                                           const BR_TString<tCharacter> &string2);
  95.     
  96.     BR_Boolean FindSubString(const BR_TString<tCharacter> &string,
  97.                             const BR_TString<tCharacter> &subString,
  98.                             BR_CharacterPosition &foundPosition,
  99.                             BR_CharacterPosition startPosition=0);
  100.                                      
  101.     BR_Boolean FindCharacter(const BR_TString<tCharacter> &string,
  102.                             tCharacter character,
  103.                             BR_CharacterPosition &foundPosition,
  104.                             BR_CharacterPosition startPosition=0);
  105.                                     
  106.     BR_Boolean FindWhiteSpace(const BR_TString<tCharacter> &string,
  107.                             BR_CharacterPosition &foundPosition,
  108.                             BR_CharacterPosition startPosition=0);
  109.                                          
  110.     BR_Boolean FindNonWhiteSpace(const BR_TString<tCharacter> &string,
  111.                                  BR_CharacterPosition &foundPosition,
  112.                                  BR_CharacterPosition startPosition=0);
  113.                                          
  114.     void Substitute(BR_TString<tCharacter> &string,
  115.                     const BR_TString<tCharacter> &searchString,
  116.                     const BR_TString<tCharacter> &substitutionString);
  117.     
  118.     void ToUpper(BR_TString<tCharacter> &string);
  119.     
  120.     void ToLower(BR_TString<tCharacter> &string);
  121.                                      
  122.     // Static functions for accessing default and current string tools.
  123.  
  124.     static BR_TStringTool<tCharacter>* GetCurrentStringTool();
  125.         // Return a pointer to the current string tool.
  126.         
  127.     static BR_TStringTool<tCharacter>* GetDefaultStringTool();
  128.         // Return a pointer to the default string tool.
  129.         
  130. #ifdef qTemplateClassGlobalBugIsFixed
  131.     static BR_TStringTool<tCharacter>* SetCurrentStringTool(BR_TStringTool<tCharacter>* tool);
  132.         // Make tool the current string tool.
  133.         // Returns the prior string tool.
  134.  
  135.     static void AdoptDefaultStringTool(BR_TStringTool<tCharacter>* tool);
  136.         // Make tool the default string tool.
  137.         // Returns the prior default string tool.
  138. #endif
  139.  
  140. private:
  141.  
  142. #ifdef qTemplateClassGlobalBugIsFixed
  143.     static BR_TStringTool<tCharacter>*    gCurrentStringTool;
  144.     static BR_TStringTool<tCharacter>*    gDefaultStringTool;
  145. #endif
  146.  
  147. };
  148.  
  149. //========================================================================================
  150. //    CLASS BR_TMinimalStringTool
  151. //
  152. //        A minimalist, braindead string tool.  Operations are done without any knowledge
  153. //        of language, locale, character set, case sensitivity, etc.  This tool is provided
  154. //        for quick and dirty use where lack of such knowledge is not considered a problem.
  155. //        Real applications will need to use more sophisticated string tools, provided in
  156. //        other, higher level components.
  157. //========================================================================================
  158.  
  159. template <class tCharacter>
  160. class BR_TMinimalStringTool : public BR_TStringTool<tCharacter>
  161. {
  162. public:
  163.  
  164.     virtual ~BR_TMinimalStringTool();
  165.     BR_TMinimalStringTool();
  166.  
  167.     virtual void ConvertToChar(const tCharacter* source, BR_Char* destination, BR_CharacterCount items);
  168.     
  169.     virtual void ConvertToWideChar(const tCharacter* source, BR_WideChar* destination, BR_CharacterCount items);
  170.  
  171.     virtual BR_StringCompareResult CompareStrings(BR_TTextReader<tCharacter> &reader1,
  172.                                           BR_TTextReader<tCharacter> &reader2);
  173.                                          
  174.     virtual BR_Boolean FindSubString(const BR_TTextReader<tCharacter> &reader,
  175.                                      const BR_TString<tCharacter> &subString,
  176.                                      BR_CharacterPosition &foundPosition);
  177.                                      
  178.     virtual BR_Boolean FindCharacter(BR_TTextReader<tCharacter> &reader,
  179.                                     tCharacter character,
  180.                                     BR_CharacterPosition &foundPosition);
  181.                                  
  182.     virtual BR_Boolean FindWhiteSpace(BR_TTextReader<tCharacter> &reader,
  183.                                         BR_CharacterPosition &foundPosition);
  184.                                  
  185.     virtual BR_Boolean FindNonWhiteSpace(BR_TTextReader<tCharacter> &reader,
  186.                                         BR_CharacterPosition &foundPosition);
  187.     
  188.     virtual void Substitute(const BR_TTextReader<tCharacter> &reader,
  189.                             const BR_TString<tCharacter> &searchString,
  190.                             const BR_TString<tCharacter> &substitutionString);
  191.     
  192.     virtual BR_Boolean IsWhiteSpace(tCharacter character);
  193.                                  
  194.     virtual void ToUpper(BR_TTextFilter<tCharacter> &string);
  195.     
  196.     virtual void ToLower(BR_TTextFilter<tCharacter> &string);
  197.     
  198.     // Non-virtual functions implemented using above virtual functions.
  199.  
  200.     BR_StringCompareResult CompareStrings(const BR_TString<tCharacter> &string1,
  201.                                           const BR_TString<tCharacter> &string2);
  202.     
  203.     BR_Boolean FindSubString(const BR_TString<tCharacter> &string,
  204.                             const BR_TString<tCharacter> &subString,
  205.                             BR_CharacterPosition &foundPosition,
  206.                             BR_CharacterPosition startPosition=0);
  207.                                      
  208.     BR_Boolean FindCharacter(const BR_TString<tCharacter> &string,
  209.                             tCharacter character,
  210.                             BR_CharacterPosition &foundPosition,
  211.                             BR_CharacterPosition startPosition=0);
  212.                                     
  213.     BR_Boolean FindWhiteSpace(const BR_TString<tCharacter> &string,
  214.                             BR_CharacterPosition &foundPosition,
  215.                             BR_CharacterPosition startPosition=0);
  216.                                          
  217.     BR_Boolean FindNonWhiteSpace(const BR_TString<tCharacter> &string,
  218.                                 BR_CharacterPosition &foundPosition,
  219.                                 BR_CharacterPosition startPosition=0);
  220.                                          
  221.     void Substitute(BR_TString<tCharacter> &string,
  222.                     const BR_TString<tCharacter> &searchString,
  223.                     const BR_TString<tCharacter> &substitutionString);
  224.     
  225.     void ToUpper(BR_TString<tCharacter> &string);
  226.     
  227.     void ToLower(BR_TString<tCharacter> &string);
  228.                                      
  229. };
  230.  
  231. //----------------------------------------------------------------------------------------
  232. //    BR_TMinimalStringTool<tCharacter>::BR_TMinimalStringTool
  233. //----------------------------------------------------------------------------------------
  234.  
  235. template <class tCharacter>
  236. inline BR_StringCompareResult BR_TMinimalStringTool<tCharacter>::CompareStrings(
  237.                                     const BR_TString< tCharacter>& string1,
  238.                                     const BR_TString< tCharacter>& string2)
  239. {
  240.     return BR_TStringTool<tCharacter>::CompareStrings(string1, string2);
  241. }
  242.  
  243. //----------------------------------------------------------------------------------------
  244. //    BR_TMinimalStringTool<tCharacter>::FindSubString
  245. //----------------------------------------------------------------------------------------
  246.  
  247. template <class tCharacter>
  248. inline BR_Boolean BR_TMinimalStringTool<tCharacter>::FindSubString(
  249.                         const BR_TString<tCharacter>& string,
  250.                          const BR_TString< tCharacter>& subString,
  251.                          BR_CharacterPosition& foundPosition,
  252.                          BR_CharacterPosition startPosition)
  253. {
  254.     return BR_TStringTool<tCharacter>::FindSubString(string, subString, 
  255.                                                     foundPosition, startPosition);
  256. }
  257.  
  258. //----------------------------------------------------------------------------------------
  259. //    BR_TMinimalStringTool<tCharacter>::FindCharacter
  260. //----------------------------------------------------------------------------------------
  261.  
  262. template <class tCharacter>
  263. inline BR_Boolean BR_TMinimalStringTool<tCharacter>::FindCharacter(
  264.                         const BR_TString<tCharacter>& string,
  265.                          tCharacter character,
  266.                          BR_CharacterPosition& foundPosition,
  267.                          BR_CharacterPosition startPosition)
  268. {
  269.     return BR_TStringTool<tCharacter>::FindCharacter(string, character, 
  270.                                                     foundPosition, startPosition);
  271. }
  272.  
  273. //----------------------------------------------------------------------------------------
  274. //    BR_TMinimalStringTool<tCharacter>::FindWhiteSpace
  275. //----------------------------------------------------------------------------------------
  276.  
  277. template <class tCharacter>
  278. inline BR_Boolean BR_TMinimalStringTool<tCharacter>::FindWhiteSpace(
  279.                         const BR_TString<tCharacter>& string,
  280.                           BR_CharacterPosition& foundPosition,
  281.                           BR_CharacterPosition startPosition)
  282. {
  283.     return BR_TStringTool<tCharacter>::FindWhiteSpace(string, foundPosition, startPosition);
  284. }
  285.  
  286. //----------------------------------------------------------------------------------------
  287. //    BR_TMinimalStringTool<tCharacter>::FindNonWhiteSpace
  288. //----------------------------------------------------------------------------------------
  289.  
  290. template <class tCharacter>
  291. inline BR_Boolean BR_TMinimalStringTool<tCharacter>::FindNonWhiteSpace(
  292.                             const BR_TString<tCharacter>& string,
  293.                              BR_CharacterPosition& foundPosition,
  294.                              BR_CharacterPosition startPosition)
  295. {
  296.     return BR_TStringTool<tCharacter>::FindNonWhiteSpace(string, 
  297.                                                         foundPosition, 
  298.                                                         startPosition);
  299. }
  300.  
  301. #endif
  302.